home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / workbench werkzeuge / bildschirmschoner / bserver_v1.5 / sources.lha / Sources / server / gadgets.c < prev    next >
C/C++ Source or Header  |  1995-11-08  |  7KB  |  254 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <exec/libraries.h>
  4. #include <intuition/gadgetclass.h>
  5. #include <string.h>
  6.  
  7. #include <proto/exec.h>
  8. #include <proto/intuition.h>
  9. #include <proto/gadtools.h>
  10.  
  11. #include "/include/server.h"
  12.  
  13. struct Gadget *glist, *gad, *blank_gdg, *random_gdg, *list_gdg, *args_gdg,
  14.        *time_gdg, *tchange_gdg, *bri_gdg, *snd_gdg;
  15.  
  16. extern UWORD wwidth, wheight;
  17. extern struct List ClientsList, *ModeList;
  18. extern struct ModeNode *DisplayNode;
  19. extern UWORD delaySecs, changeSecs;
  20. extern UBYTE briLevel, sndLevel;
  21. extern BOOL CommodityActive, RandomClient;
  22. extern UWORD DefaultClient;
  23. extern WORD ActiveClient;
  24.  
  25. extern void FreeClientsList( void );
  26. extern struct List *CreateModeList( void );
  27. extern void DeleteModeList( void );
  28. extern void GetDisplayNodeFromID( void );
  29. extern struct ClientNode *FindClientNode( WORD );
  30.  
  31. extern char *msg_timeout, *msg_changetime, *msg_random, *msg_hide,
  32.      *msg_quit, *msg_blank, *msg_killsel, *msg_addcli, *msg_brilevel,
  33.      *msg_sndlevel;
  34.  
  35.  
  36.  /****************
  37.  *               *
  38.  * GADGETS STUFF *
  39.  *               *
  40.  ****************/
  41.  
  42. struct VisualInfo *vi;
  43. UWORD fonth;
  44. struct NewGadget newgdg = { 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0 };
  45. struct Screen *WBS;
  46. struct Library *GadToolsBase;
  47. struct IntuitionBase *IntuitionBase;
  48. UWORD wleft = (UWORD)~0, wtop = (UWORD)~0;
  49. UWORD zoomdims[4];
  50. struct DrawInfo *dri;
  51.  
  52. struct IntuiText it = { 0, 0, 0, 0, 0, NULL, NULL, NULL };
  53. UWORD maxstrlen;
  54.  
  55. UWORD CheckMax( STRPTR text, UWORD add_gdw, UWORD prev )
  56. {
  57. register UWORD ilength;
  58.  
  59. it.IText = text;
  60. if ( ( ilength = IntuiTextLength( &it ) + add_gdw ) > prev )
  61.     return( ilength );
  62. else
  63.     return( prev );
  64. }
  65.  
  66.  
  67. UWORD SetUpGadgets( void )
  68. {
  69. if ( CreateModeList() )
  70.     {
  71.     GetDisplayNodeFromID();
  72.  
  73.     if ( WBS = LockPubScreen( NULL ) )
  74.         {
  75.         fonth = WBS->Font->ta_YSize;
  76.         if ( fonth < 12 )
  77.             fonth = 12;
  78.         it.ITextFont = WBS->Font;
  79.         newgdg.ng_TextAttr = WBS->Font;
  80.         newgdg.ng_Height = fonth + 4;
  81.  
  82.         if ( vi = GetVisualInfo( WBS, TAG_END ) )
  83.             {
  84.             newgdg.ng_VisualInfo = vi;
  85.             newgdg.ng_TopEdge = WBS->BarHeight + 3;
  86.  
  87.             maxstrlen = 0;
  88.             maxstrlen = CheckMax( msg_timeout, 50, maxstrlen );
  89.             maxstrlen = CheckMax( msg_changetime, 50, maxstrlen );
  90.             maxstrlen = CheckMax( msg_brilevel, 50, maxstrlen );
  91.             maxstrlen = CheckMax( msg_random, 26, maxstrlen );
  92.             maxstrlen = CheckMax( msg_hide, 0, maxstrlen );
  93.             maxstrlen = CheckMax( msg_quit, 0, maxstrlen );
  94.             maxstrlen = CheckMax( msg_blank, 0, maxstrlen );
  95.             maxstrlen = CheckMax( msg_killsel, 0, maxstrlen );
  96.             maxstrlen = CheckMax( msg_addcli, 0, maxstrlen );
  97.             newgdg.ng_LeftEdge = WBS->WBorLeft + maxstrlen - 30;
  98.  
  99.             gad = CreateContext (&glist);
  100.  
  101.             newgdg.ng_Flags = PLACETEXT_LEFT;
  102.             newgdg.ng_Width = 50;
  103.             newgdg.ng_GadgetText = msg_timeout;
  104.             newgdg.ng_GadgetID = TIMEOUT_GDG;
  105.             gad = time_gdg = CreateGadget( INTEGER_KIND, gad, &newgdg,
  106.                 GTIN_Number, delaySecs,
  107.                 GTIN_MaxChars, 5,
  108.                 GT_Underscore, '_', TAG_END );
  109.  
  110.             newgdg.ng_TopEdge += gad->Height + 7;
  111.             newgdg.ng_GadgetText = msg_changetime;
  112.             newgdg.ng_GadgetID = CHANGETIME_GDG;
  113.             gad = tchange_gdg = CreateGadget( INTEGER_KIND, gad, &newgdg,
  114.                 GTIN_Number, changeSecs,
  115.                 GTIN_MaxChars, 5,
  116.                 GA_Disabled, !RandomClient,
  117.                 GT_Underscore, '_', TAG_END );
  118.  
  119.             newgdg.ng_TopEdge += gad->Height + 7;
  120.             newgdg.ng_GadgetText = msg_brilevel;
  121.             newgdg.ng_GadgetID = BRILEVEL_GDG;
  122.             gad = bri_gdg = CreateGadget( INTEGER_KIND, gad, &newgdg,
  123.                 GTIN_Number, briLevel,
  124.                 GTIN_MaxChars, 3,
  125.                 GT_Underscore, '_', TAG_END );
  126.  
  127.             newgdg.ng_TopEdge += gad->Height + 7;
  128.             newgdg.ng_GadgetText = msg_sndlevel;
  129.             newgdg.ng_GadgetID = SNDLEVEL_GDG;
  130.             gad = snd_gdg = CreateGadget( INTEGER_KIND, gad, &newgdg,
  131.                 GTIN_Number, sndLevel,
  132.                 GTIN_MaxChars, 3,
  133.                 GT_Underscore, '_', TAG_END );
  134.  
  135.             newgdg.ng_Height = fonth - 1;
  136.             newgdg.ng_Width = 26;
  137.             newgdg.ng_GadgetID = RANDOM_GDG;
  138.             newgdg.ng_TopEdge += gad->Height + 7;
  139.             newgdg.ng_LeftEdge = WBS->WBorLeft + maxstrlen - 6;
  140.             newgdg.ng_GadgetText = msg_random;
  141.             random_gdg = gad = CreateGadget( CHECKBOX_KIND, gad, &newgdg,
  142.                 GTCB_Checked, RandomClient,
  143.                 GTCB_Scaled, TRUE,
  144.                 GT_Underscore, '_', TAG_END );
  145.  
  146.             newgdg.ng_Height = fonth + 4;
  147.             newgdg.ng_GadgetID = HIDE_GDG;
  148.             newgdg.ng_TopEdge += fonth + 2;
  149.             newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
  150.             newgdg.ng_Flags = 0;
  151.             newgdg.ng_Width = maxstrlen + 16;
  152.             newgdg.ng_GadgetText = msg_hide;
  153.             gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  154.                 GT_Underscore, '_', TAG_END );
  155.             
  156.             newgdg.ng_GadgetID = QUIT_GDG;
  157.             newgdg.ng_TopEdge += gad->Height + 1;
  158.             newgdg.ng_GadgetText = msg_quit;
  159.             gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  160.                 GT_Underscore, '_', TAG_END );
  161.  
  162.             newgdg.ng_GadgetID = BLANK_GDG;
  163.             newgdg.ng_TopEdge += gad->Height + 1;
  164.             newgdg.ng_GadgetText = msg_blank;
  165.             blank_gdg = gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  166.                 GT_Underscore, '_', TAG_END );
  167.  
  168.             newgdg.ng_GadgetID = KILL_GDG;
  169.             newgdg.ng_LeftEdge = WBS->WBorLeft + maxstrlen + 22;
  170.             newgdg.ng_GadgetText = msg_killsel;
  171.             gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  172.                 GT_Underscore, '_', TAG_END );
  173.  
  174.             newgdg.ng_GadgetID = ADDCLIENTS_GDG;
  175.             newgdg.ng_TopEdge -= blank_gdg->Height + 1;
  176.             newgdg.ng_GadgetText = msg_addcli;
  177.             gad = CreateGadget( BUTTON_KIND, gad, &newgdg,
  178.                 GT_Underscore, '_', TAG_END );
  179.  
  180.             newgdg.ng_GadgetID = CLIENTARGS_GDG;
  181.             newgdg.ng_TopEdge -= blank_gdg->Height + 1;
  182.             newgdg.ng_GadgetText = NULL;
  183.             args_gdg = gad = CreateGadget( STRING_KIND, gad, &newgdg,
  184.                 GTST_MaxChars, ARGS_MAXLENGTH,
  185.                 GTST_String, FindClientNode( DefaultClient )->cn_ClientArgs,
  186.                 TAG_END );
  187.  
  188.             newgdg.ng_GadgetID = LIST_GDG;
  189.             newgdg.ng_TopEdge = WBS->BarHeight + 3;
  190.             newgdg.ng_GadgetText = NULL;
  191.             newgdg.ng_Height = gad->TopEdge - newgdg.ng_TopEdge - 2;
  192.             newgdg.ng_Flags = PLACETEXT_ABOVE;
  193.             list_gdg = gad = CreateGadget( LISTVIEW_KIND, gad, &newgdg,
  194.                 GTLV_Labels, &ClientsList,
  195.                 GTLV_Top, DefaultClient,
  196.                 GTLV_Selected, DefaultClient,
  197.                 GTLV_ShowSelected, NULL,
  198.                 TAG_END );
  199.  
  200.             newgdg.ng_GadgetID = MODEID_GDG;
  201.             newgdg.ng_TopEdge =  blank_gdg->TopEdge + blank_gdg->Height + 1;
  202.             newgdg.ng_LeftEdge = WBS->WBorLeft + 4;
  203.             newgdg.ng_Width = maxstrlen * 2 + 34;
  204.             newgdg.ng_Height -= fonth << 1;
  205.             newgdg.ng_GadgetText = NULL;
  206.             gad = CreateGadget( LISTVIEW_KIND, gad, &newgdg,
  207.                 GTLV_Labels, ModeList,
  208.                 GTLV_Top, DisplayNode->mn_Index,
  209.                 GTLV_Selected, DisplayNode->mn_Index,
  210.                 GTLV_ShowSelected, NULL,
  211.                 TAG_END );
  212.  
  213.             /* Set up gadgets */
  214.             if ( gad )
  215.                 {
  216.                 wwidth = (UWORD)(gad->LeftEdge + gad->Width + 4 + WBS->WBorRight);
  217.                 if ( GadToolsBase->lib_Version < 38 )
  218.                     wheight = (UWORD)(gad->TopEdge + 1 + fonth + WBS->WBorBottom);
  219.                 else
  220.                     wheight = (UWORD)(gad->TopEdge + WBS->WBorBottom);
  221.                 if ( wleft == ~0 )
  222.                     wleft = (WBS->Width - wwidth)>>1;
  223.                 if ( wtop == ~0 )
  224.                     wtop = (WBS->Height - wheight)>>1;
  225.  
  226.                 zoomdims[0] = (UWORD)~0;
  227.                 zoomdims[1] = (UWORD)~0;
  228.                 zoomdims[2] = wwidth;
  229.                 zoomdims[3] = wheight + gad->Height + 2;
  230.  
  231.                 return( TRUE );
  232.                 }
  233.  
  234.             FreeGadgets( glist );
  235.             }
  236.         FreeVisualInfo( vi );
  237.         vi = NULL;
  238.         }
  239.     UnlockPubScreen( NULL, WBS );
  240.     }
  241. DeleteModeList();
  242.  
  243. return( FALSE );
  244. }
  245.  
  246.  
  247. void RemoveGadgets( void )
  248. {
  249. FreeGadgets( glist );
  250. FreeVisualInfo( vi );
  251. UnlockPubScreen( NULL, WBS );
  252. DeleteModeList();
  253. }
  254.